/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PacientePresentacion.java
 *
 * Created on 23-jul-2010, 16:09:13
 */
package presentacion.paciente;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.ObraSocial;
import hibernate.objeto.Paciente;
import hibernate.objeto.Persona;
import hibernate.objeto.Provincia;
import java.awt.Cursor;
import logica.PacienteLogica;
import logica.CapaLogica;
import logica.validacion.PersonaValidacion;
import logica.validacion.PacienteValidacion;
import presentacion.CapaPresentacion;
import presentacion.obra_social.GestionObraSocialPresentacion;
import presentacion.utilidad.ImageFilter;
import presentacion.utilidad.tabla.MiModeloTabla;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import logica.PersonaLogica;
import logica.ProvinciaLogica;
import logica.validacion.CapaValidacion;
import logica.validacion.ObraSocialValidacion;
import presentacion.acceso.RestriccionAcceso;
import presentacion.utilidad.PopUpMenu;
import presentacion.comun.ComunPersonaPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.persona.ReasignarContactoAPacientePresentacion;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Administrador
 */
public class PacientePresentacion extends javax.swing.JDialog {
    /** Creates new form PacientePresentacion */
    public PacientePresentacion(java.awt.Frame parent,
            boolean modal, Paciente unPaciente) {
        super(parent, modal);

        listaDeProvincias = ProvinciaLogica.getAll();
        paciente = unPaciente;
        obraSocial = null;
        personaDeContacto = null;
        tutor = null;
        
        pacienteAgregadoOModificado = false;
        
        initComponents();
        personalizarGUI(false);
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     * @param recargarPaciente Indica si se debe actualizar el paciente, ya que
     * cuando se lo llama desde otra ventana se debe obtener una versión
     * actualizada del paciente
     */
    public final void personalizarGUI(boolean recargarPaciente) {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarPacientePresentacion(this,
                tablaPersona, tablaPersonaScrollPanel));

        iniciarPaginador();
        cargarTablaPersona();

        if (CapaPresentacion.modoCarga) {
            modoCarga();
        } else if (CapaPresentacion.modoModificacion) {
            modoModificacion();
        } else if (CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
    }

    /**
     * Setea la ventana en modo visualización.
     *
     */
    private void modoVisualizacion() {
        this.setTitle("Ver estado de Paciente");
        exhibirDatosEnPantalla();
        if (!textoNumeroHcPersonal.getText().contains(":")) {
            textoNumeroHcPersonal.setText(
                    textoNumeroHcPersonal.getText() + ": "
                    + String.valueOf(paciente.getIdPaciente()));
        }
        CapaPresentacion.personalizarBotonesEnVisualizacion(textoDescriptivoVentana,
                botonAceptar, botonCancelar);
        setearEstadoCampos(false);
        tablaPersona.setEnabled(false);
        filtrar.setEnabled(false);
        textoFiltrar.setEnabled(false);
        botonAgregarPersona.setEnabled(false);
        botonCancelar.requestFocus();
    }

    /**
     * Setea la ventana en modo modificación.
     *
     */
    private void modoModificacion() {
        this.setTitle("Modificar Paciente");
        exhibirDatosEnPantalla();
        if (!textoNumeroHcPersonal.getText().contains(":")) {
            textoNumeroHcPersonal.setText(
                    textoNumeroHcPersonal.getText() + ": "
                    + String.valueOf(paciente.getIdPaciente()));
        }
    }

    /**
     * Setea la ventana en modo carga.
     *
     */
    private void modoCarga() {
        paciente = new Paciente();
        this.setTitle("Agregar Paciente");
                textoNumeroHcPersonal.setVisible(false);
    }

    /**
     * Establece la propiedad setEnabled de cada textfield.
     *
     * @param estado El estado a setear
     */
    private void setearEstadoCampos(boolean estado) {
        tipoDeDocumentoPersonal.setEnabled(estado);
        numeroDeDocumentoPersonal.setEnabled(estado);
        nombrePersonal.setEnabled(false);
        apellidoPersonal.setEnabled(estado);
        masculinoPersonal.setEnabled(estado);
        femeninoPersonal.setEnabled(estado);
        estadoCivilPersonal.setEnabled(estado);
        ocupacionPersonal.setEnabled(estado);
        grupoSanguineoPersonal.setEnabled(estado);
        factorSanguineoPersonal.setEnabled(estado);
        fechaDeNacimientoPersonal.setEnabled(false);
        botonObraSocialPersonal.setEnabled(estado);
        numeroAfiliacionObraSocialPersonal.setEnabled(estado);
        botonFotoPersonal.setEnabled(estado);

        telefonoParticularDatosDeContacto.setEnabled(estado);
        telefonoMovilDatosDeContacto.setEnabled(estado);
        correoElectronicoDatosDeContacto.setEnabled(estado);

        extranjeroDomicilio.setEnabled(estado);
        calleDomicilio.setEnabled(estado);
        pisoDomicilio.setEnabled(estado);
        departamentoDomicilio.setEnabled(estado);
        provinciaDomicilio.setEnabled(estado);
        localidadDomicilio.setEnabled(estado);
        codigoPostalDomicilio.setEnabled(estado);

        botonSeleccionarPersonaDeContacto.setEnabled(estado);
        vinculoPersonaDeContacto.setEnabled(estado);
        botonSeleccionarTutor.setEnabled(estado);
    }

    /**
     * En caso de que se trate de la modificación de un paciente, se cargan
     * los datos del mismo en los distintos campos de la pantalla.
     *
     */
    private void exhibirDatosEnPantalla() {
        exhibirDatosPersonal();
        exhibirDatosDeContacto();
        exhibirDatosDomicilio();
        exhibirDatosPersonaResponsable();
        exhibirDatosTutor();
    }

    /**
     * Completa la información del paciente en los respectivos campos del panel
     * Personal.
     *
     */
    private void exhibirDatosPersonal() {
        //Seteo de documento
        tipoDeDocumentoPersonal.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                paciente.getPersona().getTipoDeDocumentoPersona(),
                tipoDeDocumentoPersonal));
        numeroDeDocumentoPersonal.setText(
                paciente.getPersona().getNumeroDeDocumentoPersona());
        numeroDeDocumentoPersonal.setCaretPosition(0);

        //Seteo de nombre
        nombrePersonal.setText(paciente.getPersona().getNombrePersona());
        nombrePersonal.setCaretPosition(0);

        //Seteo de apellido
        apellidoPersonal.setText(paciente.getPersona().getApellidoPersona());
        apellidoPersonal.setCaretPosition(0);

        //Seteo Sexo
        if (paciente.getSexoPaciente().equalsIgnoreCase("masculino")) {
            masculinoPersonal.setSelected(true);
        } else {
            femeninoPersonal.setSelected(true);
        }

        //Seteo Estado civil
        estadoCivilPersonal.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                paciente.getEstadoCivilPaciente(),
                estadoCivilPersonal));

        //Seteo Ocupación
        ocupacionPersonal.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                paciente.getOcupacionPaciente(),
                ocupacionPersonal));

        //Seteo Grupo Sanguineo
        grupoSanguineoPersonal.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                paciente.getGrupoSanguineoPaciente(), grupoSanguineoPersonal));

        //Seteo Factor Sanguineo
        factorSanguineoPersonal.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                paciente.getFactorSanguineoPaciente(), factorSanguineoPersonal));

        //Seteo de fecha
        fechaDeNacimientoPersonal.setDate(
                paciente.getPersona().getFechaDeNacimientoPersona());

        //Seteo Obra social
        if (paciente.getObraSocial() != null) {
            //Completa el campo con la Obra Social seleccioanda
            botonObraSocialPersonal.setIcon(Icono.ICONO_16_QUITAR);
            botonObraSocialPersonal.setToolTipText("Quitar Obra Social");
            obraSocial = paciente.getObraSocial();
            obraSocialPersonal.setText(paciente.getObraSocial().
                    getDetalleObraSocial());
            obraSocialPersonal.setToolTipText(paciente.getObraSocial().
                    getDetalleObraSocial());
            numeroAfiliacionObraSocialPersonal.setText(
                    paciente.getNumeroAfiliacionObraSocialPaciente());
            numeroAfiliacionObraSocialPersonal.setCaretPosition(0);
        }

        //Seteo Foto
        if (paciente.getNombreArchivoFotografiaPaciente() != null) {
            botonFotoPersonal.setIcon(Icono.ICONO_16_QUITAR);
            botonFotoPersonal.setToolTipText("Quitar imágen");
            rutaFotoPersonal.setText(
                    "<html><u>" + CapaLogica.
                    reemplazarDosBarrasInvertidasPorUnaBarraInvertida(
                    paciente.getNombreArchivoFotografiaPaciente()) + "</u>"
                    );
            rutaFotoPersonal.setToolTipText("Click para ver: " + CapaLogica.
                    reemplazarDosBarrasInvertidasPorUnaBarraInvertida(
                    paciente.getNombreArchivoFotografiaPaciente()));
            rutaFotoPersonal.setForeground(Fuente.COLOR_HIPERVINCULO);
        }
    }

    /**
     * Completa la información del paciente en los respectivos campos del panel
     * Contacto.
     *
     */
    private void exhibirDatosDeContacto() {
        //Seteo de teléfonos
        telefonoParticularDatosDeContacto.setText(
                paciente.getPersona().getTelefonoParticularPersona());
        telefonoParticularDatosDeContacto.setCaretPosition(0);
        telefonoMovilDatosDeContacto.setText(
                paciente.getPersona().getTelefonoMovilPersona());
        telefonoMovilDatosDeContacto.setCaretPosition(0);

        //Seteo de correo
        correoElectronicoDatosDeContacto.setText(
                paciente.getPersona().getCorreoElectronicoPersona());
        correoElectronicoDatosDeContacto.setCaretPosition(0);
    }

    /**
     * Completa la información del paciente en los respectivos campos del panel
     * Domicilio.
     *
     */
    private void exhibirDatosDomicilio() {
        //Seteo de Domicilio
        if (paciente.getDomicilio() != null) {
            calleDomicilio.setText(CapaLogica.separarCalle(
                    paciente.getDomicilio().getDireccionDomicilio()));
            calleDomicilio.setCaretPosition(0);
            pisoDomicilio.setText(CapaLogica.separarPiso(
                    paciente.getDomicilio().getDireccionDomicilio()));
            pisoDomicilio.setCaretPosition(0);
            departamentoDomicilio.setText(CapaLogica.separarDepartamento(
                    paciente.getDomicilio().getDireccionDomicilio()));
            departamentoDomicilio.setCaretPosition(0);

            if (paciente.getDomicilio().getLocalidad() != null) {

                if (paciente.getDomicilio().getLocalidad().getProvincia() !=
                        null) {
                    provinciaDomicilio.setSelectedIndex(paciente.getDomicilio().
                        getLocalidad().getProvincia().getIdProvincia());
                }

                if (provinciaDomicilio.getSelectedIndex() > 1) {
                    localidadDomicilio.setModel(
                            CapaPresentacion.getListaDeLocalidad(
                            listaDeProvincias,
                            provinciaDomicilio.getSelectedIndex() - 1));

                    localidadDomicilio.getModel().setSelectedItem(
                            paciente.getDomicilio().getLocalidad().
                            getNombreLocalidad());

                } else {
                    localidadDomicilio.setModel(new javax.swing.
                            DefaultComboBoxModel());
                }

            }
            codigoPostalDomicilio.setText(
                    paciente.getDomicilio().getCodigoPostal());
            codigoPostalDomicilio.setCaretPosition(0);
        }
    }

    /**
     * Completa la información del paciente en los respectivos campos del panel
     * Persona de Contacto.
     *
     */
    private void exhibirDatosPersonaResponsable() {
        //Seteo de persona de contacto
        if (paciente.getPersonaDeContacto() != null) {
            personaDeContacto = paciente.getPersonaDeContacto().getPersona();
            vinculoPersonaDeContacto.setSelectedIndex(
                    CapaPresentacion.getIndiceComboBoxPorString(
                    paciente.getPersonaDeContacto().
                    getVinculoPersonaDeContacto(),
                    vinculoPersonaDeContacto));
            documentoPersonaDeContacto.setText(
                    CapaPresentacion.imprimirDocumento(
                    paciente.getPersonaDeContacto().
                    getPersona()));
            apellidoYNombrePersonaDeContacto.setText(
                    CapaPresentacion.imprimirApellidoYNombrePersona(
                    paciente.getPersonaDeContacto().
                    getPersona()));

            if(!documentoPersonaDeContacto.getText().isEmpty()){
                invertirBoton(botonSeleccionarPersonaDeContacto);
            }
        }
    }

    /**
     * Completa la información del paciente en los respectivos campos del panel
     * Tutor.
     *
     */
    private void exhibirDatosTutor() {
        //Seteo de tutor
        if (paciente.getTutor() != null) {
            tutor = paciente.getTutor().getPersona();
            documentoTutor.setText(
                    CapaPresentacion.imprimirDocumento(
                    paciente.getTutor().
                    getPersona()));
            apellidoYNombreTutor.setText(
                    CapaPresentacion.imprimirApellidoYNombrePersona(
                    paciente.getTutor().
                    getPersona()));

            if(!documentoTutor.getText().isEmpty()){
                invertirBoton(botonSeleccionarTutor);
            }
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        textoNumeroHcPersonal = new javax.swing.JLabel();
        panelPersonal = new javax.swing.JPanel();
        textoTipoDeDocumentoPersonal = new javax.swing.JLabel();
        tipoDeDocumentoPersonal = new javax.swing.JComboBox();
        textoNumeroDeDocumentoPersonal = new javax.swing.JLabel();
        numeroDeDocumentoPersonal = new javax.swing.JTextField();
        textoNombrePersonal = new javax.swing.JLabel();
        nombrePersonal = new javax.swing.JTextField();
        textoApellidoPersonal = new javax.swing.JLabel();
        apellidoPersonal = new javax.swing.JTextField();
        textoFechaNacimientoPersonal = new javax.swing.JLabel();
        fechaDeNacimientoPersonal = new com.toedter.calendar.JDateChooser();
        textoSexoPersonal = new javax.swing.JLabel();
        femeninoPersonal = new javax.swing.JRadioButton();
        masculinoPersonal = new javax.swing.JRadioButton();
        textoEstadoCivilPersonal = new javax.swing.JLabel();
        estadoCivilPersonal = new javax.swing.JComboBox();
        textoOcupacionPersonal = new javax.swing.JLabel();
        ocupacionPersonal = new javax.swing.JComboBox();
        textoGrupoSanguineoPersonal = new javax.swing.JLabel();
        grupoSanguineoPersonal = new javax.swing.JComboBox();
        textoFactorSanguineoPersonal = new javax.swing.JLabel();
        factorSanguineoPersonal = new javax.swing.JComboBox();
        botonObraSocialPersonal = new javax.swing.JButton();
        obraSocialPersonal = new javax.swing.JLabel();
        textoNumeroAfiliacionObraSocialPersonal = new javax.swing.JLabel();
        numeroAfiliacionObraSocialPersonal = new javax.swing.JTextField();
        botonFotoPersonal = new javax.swing.JButton();
        rutaFotoPersonal = new javax.swing.JLabel();
        panelDatosDeContacto = new javax.swing.JPanel();
        textoTelefonoParticularDatosDeContacto = new javax.swing.JLabel();
        telefonoParticularDatosDeContacto = new javax.swing.JTextField();
        textoTelefonoMovilDatosDeContacto = new javax.swing.JLabel();
        telefonoMovilDatosDeContacto = new javax.swing.JTextField();
        textoCorreoElectronicoDatosDeContacto = new javax.swing.JLabel();
        correoElectronicoDatosDeContacto = new javax.swing.JTextField();
        extranjeroDomicilio = new javax.swing.JCheckBox();
        panelDomicilio = new javax.swing.JPanel();
        textoDomicilio = new javax.swing.JLabel();
        calleDomicilio = new javax.swing.JTextField();
        textoPisoDomicilio = new javax.swing.JLabel();
        pisoDomicilio = new javax.swing.JTextField();
        textoDepartamentoDomicilio = new javax.swing.JLabel();
        departamentoDomicilio = new javax.swing.JTextField();
        textoProvinciaDomicilio = new javax.swing.JLabel();
        provinciaDomicilio = new javax.swing.JComboBox();
        textoLocalidadDomicilio = new javax.swing.JLabel();
        localidadDomicilio = new javax.swing.JComboBox();
        textoCodigoPostalDomicilio = new javax.swing.JLabel();
        codigoPostalDomicilio = new javax.swing.JTextField();
        panelPersonaResponsable = new javax.swing.JPanel();
        panelPersonaDeContacto = new javax.swing.JPanel();
        textoVinculoPersonaDeContacto = new javax.swing.JLabel();
        vinculoPersonaDeContacto = new javax.swing.JComboBox();
        textoDocumentoPersonaDeContacto = new javax.swing.JLabel();
        documentoPersonaDeContacto = new javax.swing.JLabel();
        textoApellidoYNombrePersonaDeContacto = new javax.swing.JLabel();
        apellidoYNombrePersonaDeContacto = new javax.swing.JLabel();
        botonSeleccionarPersonaDeContacto = new javax.swing.JButton();
        botonSeleccionarTutor = new javax.swing.JButton();
        botonAgregarPersona = new javax.swing.JButton();
        textoFiltrar = new javax.swing.JLabel();
        filtrar = new javax.swing.JTextField();
        tablaPersonaScrollPanel = new javax.swing.JScrollPane();
        presentacion.utilidad.tabla.MiModeloTabla modeloTabla = new presentacion.utilidad.tabla.MiModeloTabla();
        tablaPersona = new javax.swing.JTable(modeloTabla);
        panelTutor = new javax.swing.JPanel();
        textoDocumentoTutor = new javax.swing.JLabel();
        documentoTutor = new javax.swing.JLabel();
        textoApellidoYNombreTutor = new javax.swing.JLabel();
        apellidoYNombreTutor = new javax.swing.JLabel();
        textoDescriptivoPanelContacto = new javax.swing.JLabel();
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Agregar Paciente");
        setMinimumSize(new java.awt.Dimension(1040, 731));
        setResizable(false);

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Ingrese los datos del paciente");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(496, 20));

        textoNumeroHcPersonal.setFont(Fuente.FUENTE_TITULO_2);
        textoNumeroHcPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoNumeroHcPersonal.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        textoNumeroHcPersonal.setText("Número HC");
        textoNumeroHcPersonal.setPreferredSize(new java.awt.Dimension(140, 20));

        panelPersonal.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Personal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelPersonal.setForeground(Fuente.COLOR_NORMAL);
        panelPersonal.setPreferredSize(new java.awt.Dimension(496, 328));

        textoTipoDeDocumentoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoTipoDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoTipoDeDocumentoPersonal.setText("Tipo documento");
        textoTipoDeDocumentoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        tipoDeDocumentoPersonal.setFont(Fuente.FUENTE_COMBOBOX);
        tipoDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
        tipoDeDocumentoPersonal.setModel(CapaPresentacion.getListaDeTipoDeDocumento());
        tipoDeDocumentoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));
        tipoDeDocumentoPersonal.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tipoDeDocumentoPersonalFocusLost(evt);
            }
        });

        textoNumeroDeDocumentoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoNumeroDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoNumeroDeDocumentoPersonal.setText("Número documento");
        textoNumeroDeDocumentoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        numeroDeDocumentoPersonal.setFont(Fuente.FUENTE_TEXTFIELD);
        numeroDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
        numeroDeDocumentoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));
        numeroDeDocumentoPersonal.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                numeroDeDocumentoPersonalFocusLost(evt);
            }
        });

        textoNombrePersonal.setFont(Fuente.FUENTE_LABEL);
        textoNombrePersonal.setForeground(Fuente.COLOR_NORMAL);
        textoNombrePersonal.setText("Nombre");
        textoNombrePersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        nombrePersonal.setFont(Fuente.FUENTE_TEXTFIELD);
        nombrePersonal.setForeground(Fuente.COLOR_NORMAL);
        nombrePersonal.setPreferredSize(new java.awt.Dimension(351, 20));

        textoApellidoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoApellidoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoPersonal.setText("Apellido");
        textoApellidoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        apellidoPersonal.setFont(Fuente.FUENTE_TEXTFIELD);
        apellidoPersonal.setForeground(Fuente.COLOR_NORMAL);
        apellidoPersonal.setPreferredSize(new java.awt.Dimension(351, 20));

        textoFechaNacimientoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoFechaNacimientoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoFechaNacimientoPersonal.setText("Fecha nacimiento");
        textoFechaNacimientoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        fechaDeNacimientoPersonal.setToolTipText("");
        fechaDeNacimientoPersonal.setMaxSelectableDate(new Date());
        fechaDeNacimientoPersonal.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaDeNacimientoPersonal.setPreferredSize(new java.awt.Dimension(144, 20));
        fechaDeNacimientoPersonal.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                fechaDeNacimientoPersonalPropertyChange(evt);
            }
        });

        textoSexoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoSexoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoSexoPersonal.setText("Sexo");
        textoSexoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        femeninoPersonal.setFont(Fuente.FUENTE_RADIOBUTTON);
        femeninoPersonal.setForeground(Fuente.COLOR_NORMAL);
        femeninoPersonal.setText("femenino");
        femeninoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));
        femeninoPersonal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                femeninoPersonalActionPerformed(evt);
            }
        });

        masculinoPersonal.setFont(Fuente.FUENTE_RADIOBUTTON);
        masculinoPersonal.setForeground(Fuente.COLOR_NORMAL);
        masculinoPersonal.setText("masculino");
        masculinoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));
        masculinoPersonal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                masculinoPersonalActionPerformed(evt);
            }
        });

        textoEstadoCivilPersonal.setFont(Fuente.FUENTE_LABEL);
        textoEstadoCivilPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoEstadoCivilPersonal.setText("Estado civil");
        textoEstadoCivilPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        estadoCivilPersonal.setFont(Fuente.FUENTE_COMBOBOX);
        estadoCivilPersonal.setForeground(Fuente.COLOR_NORMAL);
        estadoCivilPersonal.setModel(CapaPresentacion.getListaDeEstadoCivil());
        estadoCivilPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        textoOcupacionPersonal.setFont(Fuente.FUENTE_LABEL);
        textoOcupacionPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoOcupacionPersonal.setText("Ocupación");
        textoOcupacionPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        ocupacionPersonal.setFont(Fuente.FUENTE_COMBOBOX);
        ocupacionPersonal.setForeground(Fuente.COLOR_NORMAL);
        ocupacionPersonal.setModel(CapaPresentacion.getListaDeOcupaciones());
        ocupacionPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        textoGrupoSanguineoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoGrupoSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoGrupoSanguineoPersonal.setText("Grupo sanguíneo");
        textoGrupoSanguineoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        grupoSanguineoPersonal.setFont(Fuente.FUENTE_COMBOBOX);
        grupoSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
        grupoSanguineoPersonal.setModel(CapaPresentacion.getListaDeGrupoSanguineo());
        grupoSanguineoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        textoFactorSanguineoPersonal.setFont(Fuente.FUENTE_LABEL);
        textoFactorSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoFactorSanguineoPersonal.setText("Rh");
        textoFactorSanguineoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        factorSanguineoPersonal.setFont(Fuente.FUENTE_COMBOBOX);
        factorSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
        factorSanguineoPersonal.setModel(CapaPresentacion.getListaDeRh());
        factorSanguineoPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        botonObraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
        botonObraSocialPersonal.setIcon(Icono.ICONO_16_AGREGAR);
        botonObraSocialPersonal.setText("O. S");
        botonObraSocialPersonal.setToolTipText("Agregar Obra Social");
        botonObraSocialPersonal.setPreferredSize(new java.awt.Dimension(95, 20));
        botonObraSocialPersonal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonObraSocialPersonalActionPerformed(evt);
            }
        });

        obraSocialPersonal.setFont(Fuente.FUENTE_LABEL);
        obraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
        obraSocialPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        textoNumeroAfiliacionObraSocialPersonal.setFont(Fuente.FUENTE_LABEL);
        textoNumeroAfiliacionObraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
        textoNumeroAfiliacionObraSocialPersonal.setText("Número afiliación");
        textoNumeroAfiliacionObraSocialPersonal.setPreferredSize(new java.awt.Dimension(95, 20));

        numeroAfiliacionObraSocialPersonal.setFont(Fuente.FUENTE_TEXTFIELD);
        numeroAfiliacionObraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
        numeroAfiliacionObraSocialPersonal.setPreferredSize(new java.awt.Dimension(110, 20));

        botonFotoPersonal.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonFotoPersonal.setForeground(Fuente.COLOR_NORMAL);
        botonFotoPersonal.setIcon(Icono.ICONO_16_AGREGAR);
        botonFotoPersonal.setText("Foto");
        botonFotoPersonal.setToolTipText("Agregar imágen (hasta 1 Gb)");
        botonFotoPersonal.setPreferredSize(new java.awt.Dimension(95, 20));
        botonFotoPersonal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonFotoPersonalActionPerformed(evt);
            }
        });

        rutaFotoPersonal.setFont(Fuente.FUENTE_LABEL);
        rutaFotoPersonal.setForeground(Fuente.COLOR_NORMAL);
        rutaFotoPersonal.setPreferredSize(new java.awt.Dimension(351, 20));
        rutaFotoPersonal.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                rutaFotoPersonalMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                rutaFotoPersonalMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                rutaFotoPersonalMouseExited(evt);
            }
        });

        javax.swing.GroupLayout panelPersonalLayout = new javax.swing.GroupLayout(panelPersonal);
        panelPersonal.setLayout(panelPersonalLayout);
        panelPersonalLayout.setHorizontalGroup(
            panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonalLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelPersonalLayout.createSequentialGroup()
                        .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(textoTipoDeDocumentoPersonal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoNombrePersonal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelPersonalLayout.createSequentialGroup()
                                .addComponent(tipoDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(textoNumeroDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(numeroDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(nombrePersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(panelPersonalLayout.createSequentialGroup()
                        .addComponent(textoFechaNacimientoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(fechaDeNacimientoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelPersonalLayout.createSequentialGroup()
                        .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(textoSexoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(panelPersonalLayout.createSequentialGroup()
                                .addGap(113, 113, 113)
                                .addComponent(femeninoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(18, 18, 18)
                        .addComponent(masculinoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelPersonalLayout.createSequentialGroup()
                            .addComponent(textoEstadoCivilPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(estadoCivilPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(textoOcupacionPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(ocupacionPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelPersonalLayout.createSequentialGroup()
                            .addComponent(textoApellidoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(apellidoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(panelPersonalLayout.createSequentialGroup()
                            .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelPersonalLayout.createSequentialGroup()
                                    .addComponent(botonObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGap(18, 18, 18)
                                    .addComponent(obraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelPersonalLayout.createSequentialGroup()
                                    .addComponent(textoGrupoSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGap(18, 18, 18)
                                    .addComponent(grupoSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGap(18, 18, 18)
                            .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(textoFactorSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(textoNumeroAfiliacionObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(18, 18, 18)
                            .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(numeroAfiliacionObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(factorSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(panelPersonalLayout.createSequentialGroup()
                            .addComponent(botonFotoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(rutaFotoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelPersonalLayout.setVerticalGroup(
            panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonalLayout.createSequentialGroup()
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTipoDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tipoDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(numeroDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoNumeroDeDocumentoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoNombrePersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombrePersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoApellidoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(apellidoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(textoFechaNacimientoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fechaDeNacimientoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(femeninoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(masculinoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(textoSexoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoEstadoCivilPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(estadoCivilPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoOcupacionPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(ocupacionPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoGrupoSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(grupoSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFactorSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(factorSanguineoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(obraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoNumeroAfiliacionObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(numeroAfiliacionObraSocialPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonFotoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(rutaFotoPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(39, 39, 39))
        );

        panelDatosDeContacto.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Datos de Contacto", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        panelDatosDeContacto.setPreferredSize(new java.awt.Dimension(496, 120));

        textoTelefonoParticularDatosDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoTelefonoParticularDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoTelefonoParticularDatosDeContacto.setText("Teléfono particular");
        textoTelefonoParticularDatosDeContacto.setPreferredSize(new java.awt.Dimension(95, 20));

        telefonoParticularDatosDeContacto.setFont(Fuente.FUENTE_TEXTFIELD);
        telefonoParticularDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        telefonoParticularDatosDeContacto.setPreferredSize(new java.awt.Dimension(345, 20));

        textoTelefonoMovilDatosDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoTelefonoMovilDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoTelefonoMovilDatosDeContacto.setText("Teléfono móvil");
        textoTelefonoMovilDatosDeContacto.setPreferredSize(new java.awt.Dimension(95, 20));

        telefonoMovilDatosDeContacto.setFont(Fuente.FUENTE_TEXTFIELD);
        telefonoMovilDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        telefonoMovilDatosDeContacto.setPreferredSize(new java.awt.Dimension(345, 20));

        textoCorreoElectronicoDatosDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoCorreoElectronicoDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoCorreoElectronicoDatosDeContacto.setText("Correo electrónico");
        textoCorreoElectronicoDatosDeContacto.setPreferredSize(new java.awt.Dimension(95, 20));

        correoElectronicoDatosDeContacto.setFont(Fuente.FUENTE_TEXTFIELD);
        correoElectronicoDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
        correoElectronicoDatosDeContacto.setPreferredSize(new java.awt.Dimension(345, 20));

        javax.swing.GroupLayout panelDatosDeContactoLayout = new javax.swing.GroupLayout(panelDatosDeContacto);
        panelDatosDeContacto.setLayout(panelDatosDeContactoLayout);
        panelDatosDeContactoLayout.setHorizontalGroup(
            panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosDeContactoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosDeContactoLayout.createSequentialGroup()
                        .addComponent(textoCorreoElectronicoDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(correoElectronicoDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDatosDeContactoLayout.createSequentialGroup()
                        .addComponent(textoTelefonoParticularDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(telefonoParticularDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDatosDeContactoLayout.createSequentialGroup()
                        .addComponent(textoTelefonoMovilDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(telefonoMovilDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelDatosDeContactoLayout.setVerticalGroup(
            panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosDeContactoLayout.createSequentialGroup()
                .addGroup(panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTelefonoParticularDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(telefonoParticularDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTelefonoMovilDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(telefonoMovilDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDatosDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoCorreoElectronicoDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(correoElectronicoDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        extranjeroDomicilio.setFont(Fuente.FUENTE_CHECKBOX);
        extranjeroDomicilio.setForeground(Fuente.COLOR_NORMAL);
        extranjeroDomicilio.setText("Reside en el extranjero");
        extranjeroDomicilio.setPreferredSize(new java.awt.Dimension(137, 20));
        extranjeroDomicilio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                extranjeroDomicilioActionPerformed(evt);
            }
        });

        panelDomicilio.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Domicilio", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelDomicilio.setForeground(Fuente.COLOR_NORMAL);
        panelDomicilio.setPreferredSize(new java.awt.Dimension(496, 179));

        textoDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoDomicilio.setText("Dirección");
        textoDomicilio.setPreferredSize(new java.awt.Dimension(95, 20));

        calleDomicilio.setFont(Fuente.FUENTE_TEXTFIELD);
        calleDomicilio.setForeground(Fuente.COLOR_NORMAL);
        calleDomicilio.setMinimumSize(new java.awt.Dimension(30, 20));
        calleDomicilio.setPreferredSize(new java.awt.Dimension(351, 20));

        textoPisoDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoPisoDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoPisoDomicilio.setText("Piso");
        textoPisoDomicilio.setPreferredSize(new java.awt.Dimension(30, 20));

        pisoDomicilio.setFont(Fuente.FUENTE_TEXTFIELD);
        pisoDomicilio.setForeground(Fuente.COLOR_NORMAL);
        pisoDomicilio.setMinimumSize(new java.awt.Dimension(30, 20));
        pisoDomicilio.setPreferredSize(new java.awt.Dimension(110, 20));

        textoDepartamentoDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoDepartamentoDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoDepartamentoDomicilio.setText("Depto");
        textoDepartamentoDomicilio.setPreferredSize(new java.awt.Dimension(30, 20));

        departamentoDomicilio.setFont(Fuente.FUENTE_TEXTFIELD);
        departamentoDomicilio.setForeground(Fuente.COLOR_NORMAL);
        departamentoDomicilio.setMinimumSize(new java.awt.Dimension(30, 20));
        departamentoDomicilio.setPreferredSize(new java.awt.Dimension(110, 20));

        textoProvinciaDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoProvinciaDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoProvinciaDomicilio.setText("Provincia");
        textoProvinciaDomicilio.setPreferredSize(new java.awt.Dimension(95, 20));

        provinciaDomicilio.setFont(Fuente.FUENTE_COMBOBOX);
        provinciaDomicilio.setForeground(Fuente.COLOR_NORMAL);
        provinciaDomicilio.setModel(CapaPresentacion.getListaDeProvincia(listaDeProvincias));
        provinciaDomicilio.setPreferredSize(new java.awt.Dimension(351, 20));
        provinciaDomicilio.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                provinciaDomicilioFocusLost(evt);
            }
        });

        textoLocalidadDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoLocalidadDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoLocalidadDomicilio.setText("Localidad");
        textoLocalidadDomicilio.setPreferredSize(new java.awt.Dimension(95, 20));

        localidadDomicilio.setFont(Fuente.FUENTE_COMBOBOX);
        localidadDomicilio.setForeground(Fuente.COLOR_NORMAL);
        localidadDomicilio.setPreferredSize(new java.awt.Dimension(351, 20));

        textoCodigoPostalDomicilio.setFont(Fuente.FUENTE_LABEL);
        textoCodigoPostalDomicilio.setForeground(Fuente.COLOR_NORMAL);
        textoCodigoPostalDomicilio.setText("Código postal");
        textoCodigoPostalDomicilio.setPreferredSize(new java.awt.Dimension(95, 20));

        codigoPostalDomicilio.setFont(Fuente.FUENTE_TEXTFIELD);
        codigoPostalDomicilio.setForeground(Fuente.COLOR_NORMAL);
        codigoPostalDomicilio.setPreferredSize(new java.awt.Dimension(110, 20));

        javax.swing.GroupLayout panelDomicilioLayout = new javax.swing.GroupLayout(panelDomicilio);
        panelDomicilio.setLayout(panelDomicilioLayout);
        panelDomicilioLayout.setHorizontalGroup(
            panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDomicilioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDomicilioLayout.createSequentialGroup()
                        .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(textoProvinciaDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(panelDomicilioLayout.createSequentialGroup()
                                .addComponent(textoPisoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(pisoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(textoDepartamentoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(departamentoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(provinciaDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(calleDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(panelDomicilioLayout.createSequentialGroup()
                        .addComponent(textoLocalidadDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(localidadDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDomicilioLayout.createSequentialGroup()
                        .addComponent(textoCodigoPostalDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(codigoPostalDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelDomicilioLayout.setVerticalGroup(
            panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDomicilioLayout.createSequentialGroup()
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(calleDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoPisoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(pisoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(departamentoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDepartamentoDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(provinciaDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoProvinciaDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoLocalidadDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(localidadDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDomicilioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoCodigoPostalDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(codigoPostalDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        panelPersonaResponsable.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Persona Responsable", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelPersonaResponsable.setForeground(Fuente.COLOR_NORMAL);
        panelPersonaResponsable.setPreferredSize(new java.awt.Dimension(1004, 319));

        panelPersonaDeContacto.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder("Persona de Contacto")));
        panelPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);

        textoVinculoPersonaDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoVinculoPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoVinculoPersonaDeContacto.setText("Relación");
        textoVinculoPersonaDeContacto.setPreferredSize(new java.awt.Dimension(100, 14));

        vinculoPersonaDeContacto.setFont(Fuente.FUENTE_COMBOBOX);
        vinculoPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        vinculoPersonaDeContacto.setModel(CapaPresentacion.getListaDeVinculoPersonaDeContacto());
        vinculoPersonaDeContacto.setPreferredSize(new java.awt.Dimension(169, 20));

        textoDocumentoPersonaDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoDocumentoPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoDocumentoPersonaDeContacto.setText("Documento");
        textoDocumentoPersonaDeContacto.setPreferredSize(new java.awt.Dimension(100, 14));

        documentoPersonaDeContacto.setFont(Fuente.FUENTE_LABEL);
        documentoPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        documentoPersonaDeContacto.setPreferredSize(new java.awt.Dimension(169, 20));

        textoApellidoYNombrePersonaDeContacto.setFont(Fuente.FUENTE_LABEL);
        textoApellidoYNombrePersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoYNombrePersonaDeContacto.setText("Apellido, Nombre");
        textoApellidoYNombrePersonaDeContacto.setPreferredSize(new java.awt.Dimension(100, 14));

        apellidoYNombrePersonaDeContacto.setFont(Fuente.FUENTE_LABEL);
        apellidoYNombrePersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        apellidoYNombrePersonaDeContacto.setPreferredSize(new java.awt.Dimension(169, 20));

        javax.swing.GroupLayout panelPersonaDeContactoLayout = new javax.swing.GroupLayout(panelPersonaDeContacto);
        panelPersonaDeContacto.setLayout(panelPersonaDeContactoLayout);
        panelPersonaDeContactoLayout.setHorizontalGroup(
            panelPersonaDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaDeContactoLayout.createSequentialGroup()
                .addGroup(panelPersonaDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoVinculoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(vinculoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDocumentoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(documentoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoApellidoYNombrePersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(apellidoYNombrePersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelPersonaDeContactoLayout.setVerticalGroup(
            panelPersonaDeContactoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaDeContactoLayout.createSequentialGroup()
                .addComponent(textoVinculoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(vinculoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoDocumentoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(documentoPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoApellidoYNombrePersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(apellidoYNombrePersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(68, Short.MAX_VALUE))
        );

        botonSeleccionarPersonaDeContacto.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonSeleccionarPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
        botonSeleccionarPersonaDeContacto.setIcon(Icono.ICONO_16_IZQUIERDA);
        botonSeleccionarPersonaDeContacto.setToolTipText("Asocia la persona seleccionada como persona de contacto");
        botonSeleccionarPersonaDeContacto.setPreferredSize(new java.awt.Dimension(42, 23));
        botonSeleccionarPersonaDeContacto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSeleccionarPersonaDeContactoActionPerformed(evt);
            }
        });

        botonSeleccionarTutor.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonSeleccionarTutor.setForeground(Fuente.COLOR_NORMAL);
        botonSeleccionarTutor.setIcon(Icono.ICONO_16_DERECHA);
        botonSeleccionarTutor.setToolTipText("Asocia la persona seleccionada como tutor");
        botonSeleccionarTutor.setEnabled(false);
        botonSeleccionarTutor.setPreferredSize(new java.awt.Dimension(42, 23));
        botonSeleccionarTutor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSeleccionarTutorActionPerformed(evt);
            }
        });

        botonAgregarPersona.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarPersona.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarPersona.setIcon(Icono.ICONO_16_AGREGAR_USUARIO);
        botonAgregarPersona.setText("Agregar persona");
        botonAgregarPersona.setToolTipText("Agrega una nueva persona para vincularla como contacto");
        botonAgregarPersona.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarPersona.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarPersonaActionPerformed(evt);
            }
        });

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrar.setText("Filtrar");
        textoFiltrar.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrar.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrar.setForeground(Fuente.COLOR_NORMAL);
        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        tablaPersonaScrollPanel.setMinimumSize(new java.awt.Dimension(0, 0));
        tablaPersonaScrollPanel.setPreferredSize(new java.awt.Dimension(454, 215));

        tablaPersona.setToolTipText("Click derecho para más opciones");
        tablaPersona.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaPersonaMouseClicked(evt);
            }
        });
        tablaPersonaScrollPanel.setViewportView(tablaPersona);
        tablaPersona.getTableHeader().setReorderingAllowed(false);

        tablaPersona.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tablaPersona.setShowHorizontalLines(false);
        tablaPersona.setShowVerticalLines(false);

        panelTutor.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder("Tutor"), "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelTutor.setForeground(Fuente.COLOR_NORMAL);
        panelTutor.setPreferredSize(new java.awt.Dimension(199, 241));

        textoDocumentoTutor.setFont(Fuente.FUENTE_LABEL);
        textoDocumentoTutor.setForeground(Fuente.COLOR_NORMAL);
        textoDocumentoTutor.setText("Documento");
        textoDocumentoTutor.setPreferredSize(new java.awt.Dimension(100, 14));

        documentoTutor.setFont(Fuente.FUENTE_LABEL);
        documentoTutor.setForeground(Fuente.COLOR_NORMAL);
        documentoTutor.setPreferredSize(new java.awt.Dimension(169, 20));

        textoApellidoYNombreTutor.setFont(Fuente.FUENTE_LABEL);
        textoApellidoYNombreTutor.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoYNombreTutor.setText("Apellido, Nombre");
        textoApellidoYNombreTutor.setPreferredSize(new java.awt.Dimension(100, 14));

        apellidoYNombreTutor.setFont(Fuente.FUENTE_LABEL);
        apellidoYNombreTutor.setForeground(Fuente.COLOR_NORMAL);
        apellidoYNombreTutor.setPreferredSize(new java.awt.Dimension(169, 20));

        javax.swing.GroupLayout panelTutorLayout = new javax.swing.GroupLayout(panelTutor);
        panelTutor.setLayout(panelTutorLayout);
        panelTutorLayout.setHorizontalGroup(
            panelTutorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTutorLayout.createSequentialGroup()
                .addGroup(panelTutorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoDocumentoTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(documentoTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoApellidoYNombreTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(apellidoYNombreTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelTutorLayout.setVerticalGroup(
            panelTutorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTutorLayout.createSequentialGroup()
                .addComponent(textoDocumentoTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(documentoTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoApellidoYNombreTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(apellidoYNombreTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(119, Short.MAX_VALUE))
        );

        textoDescriptivoPanelContacto.setFont(Fuente.FUENTE_TITULO_3);
        textoDescriptivoPanelContacto.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoPanelContacto.setText("Seleccione la persona de contacto y/o tutor de la lista");
        textoDescriptivoPanelContacto.setPreferredSize(new java.awt.Dimension(496, 20));

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelPersonaResponsableLayout = new javax.swing.GroupLayout(panelPersonaResponsable);
        panelPersonaResponsable.setLayout(panelPersonaResponsableLayout);
        panelPersonaResponsableLayout.setHorizontalGroup(
            panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoDescriptivoPanelContacto, javax.swing.GroupLayout.DEFAULT_SIZE, 966, Short.MAX_VALUE)
                    .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                        .addComponent(panelPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                                .addComponent(botonSeleccionarPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(10, 10, 10)
                                .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                                        .addComponent(botonAgregarPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE)
                                        .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(tablaPersonaScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE)))
                            .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botonSeleccionarTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelTutor, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelPersonaResponsableLayout.setVerticalGroup(
            panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                .addComponent(textoDescriptivoPanelContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                                .addGap(88, 88, 88)
                                .addComponent(botonSeleccionarTutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(panelTutor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
                            .addComponent(panelPersonaDeContacto, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                                .addGroup(panelPersonaResponsableLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(botonAgregarPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(tablaPersonaScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(panelPersonaResponsableLayout.createSequentialGroup()
                        .addGap(94, 94, 94)
                        .addComponent(botonSeleccionarPersonaDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega el paciente");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelPersonaResponsable, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(panelPersonal, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE)
                            .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(panelDomicilio, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE)
                            .addComponent(textoNumeroHcPersonal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(panelDatosDeContacto, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE)
                            .addComponent(extranjeroDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoNumeroHcPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelPersonal, javax.swing.GroupLayout.PREFERRED_SIZE, 328, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(panelDatosDeContacto, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(extranjeroDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelDomicilio, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelPersonaResponsable, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void masculinoPersonalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_masculinoPersonalActionPerformed
        if (masculinoPersonal.isSelected()) {
            femeninoPersonal.setSelected(false);
        }
}//GEN-LAST:event_masculinoPersonalActionPerformed

    /**
     * Selección de la obra social.
     * 
     * @param evt
     */
    private void botonObraSocialPersonalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonObraSocialPersonalActionPerformed
        if (botonObraSocialPersonal.getIcon().equals(Icono.ICONO_16_AGREGAR)) {
            RestriccionAcceso.GestionObraSocialPresentacion(null, true, false);

            //Completa el campo con la Obra Social seleccioanda
            obraSocial = GestionObraSocialPresentacion.getObraSocialSeleccionada();

            if (obraSocial != null) {
                obraSocialPersonal.setText(obraSocial.getDetalleObraSocial());
                obraSocialPersonal.setToolTipText(obraSocialPersonal.getText());
                obraSocialPersonal.setFont(Fuente.FUENTE_LABEL);
                obraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
                botonObraSocialPersonal.setIcon(Icono.ICONO_16_QUITAR);
                botonObraSocialPersonal.setToolTipText("Quitar Obra Social");
            } else {
                obraSocialPersonal.setText("");
                numeroAfiliacionObraSocialPersonal.setText("");
                botonObraSocialPersonal.setIcon(Icono.ICONO_16_AGREGAR);
                botonObraSocialPersonal.setToolTipText("Agregar Obra Social");
            }
            obraSocialPersonal.setToolTipText(obraSocialPersonal.getText());
        } else {
            obraSocialPersonal.setText("");
            numeroAfiliacionObraSocialPersonal.setText("");
            botonObraSocialPersonal.setIcon(Icono.ICONO_16_AGREGAR);
            botonObraSocialPersonal.setToolTipText("Agregar Obra Social");
            obraSocial = null;
        }
}//GEN-LAST:event_botonObraSocialPersonalActionPerformed

    /**
     * Despliegua un explorador para buscar la foto.
     *
     * @param evt
     */
    private void botonFotoPersonalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonFotoPersonalActionPerformed
        if (botonFotoPersonal.getIcon().equals(Icono.ICONO_16_AGREGAR)) {
            JFileChooser seleccionarArchivo = new JFileChooser();
            seleccionarArchivo.addChoosableFileFilter(new ImageFilter());
            int seleccion = seleccionarArchivo.showOpenDialog(this);

            if (seleccion == JFileChooser.APPROVE_OPTION) {
                rutaFotoPersonal.setText(
                        seleccionarArchivo.getSelectedFile().toString());
                rutaFotoPersonal.setToolTipText(rutaFotoPersonal.getText());
                rutaFotoPersonal.setFont(Fuente.FUENTE_LABEL);
                rutaFotoPersonal.setForeground(Fuente.COLOR_NORMAL);
                botonFotoPersonal.setIcon(Icono.ICONO_16_QUITAR);
                botonFotoPersonal.setToolTipText("Quitar imágen");
            } else {
                rutaFotoPersonal.setText("");
                botonFotoPersonal.setIcon(Icono.ICONO_16_AGREGAR);
                botonFotoPersonal.setToolTipText("Agregar imágen (hasta 1 Gb)");
            }
            
        } else {
            rutaFotoPersonal.setText("");
            botonFotoPersonal.setIcon(Icono.ICONO_16_AGREGAR);
            botonFotoPersonal.setToolTipText("Agregar imágen (hasta 1 Gb)");
        }
}//GEN-LAST:event_botonFotoPersonalActionPerformed

    /**
     * Habilita y deshabilita los campos domicilio segú si es extranjero.
     *
     * @param evt
     */
    private void extranjeroDomicilioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extranjeroDomicilioActionPerformed
        if (extranjeroDomicilio.isSelected()) {
            calleDomicilio.setEnabled(false);
            pisoDomicilio.setEnabled(false);
            departamentoDomicilio.setEnabled(false);
            codigoPostalDomicilio.setEnabled(false);
            localidadDomicilio.setEnabled(false);
            provinciaDomicilio.setEnabled(false);
        } else {
            calleDomicilio.setEnabled(true);
            pisoDomicilio.setEnabled(true);
            departamentoDomicilio.setEnabled(true);
            codigoPostalDomicilio.setEnabled(true);
            localidadDomicilio.setEnabled(true);
            provinciaDomicilio.setEnabled(true);
        }

}//GEN-LAST:event_extranjeroDomicilioActionPerformed

    /**
     * Habilita y deshabilita el panel de tutor de acuerdo a la edad.
     *
     * @param evt
     */
    private void fechaDeNacimientoPersonalPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_fechaDeNacimientoPersonalPropertyChange
        if (fechaDeNacimientoPersonal.getDate() != null)
            if(CapaLogica.esMenor(fechaDeNacimientoPersonal.getDate())){
                botonSeleccionarTutor.setEnabled(true);
            } else {
                botonSeleccionarTutor.setEnabled(false);
                botonSeleccionarTutor.setIcon(Icono.ICONO_16_DERECHA);
                documentoTutor.setText("");
                apellidoYNombreTutor.setText("");
                tutor = null;
            }
    }//GEN-LAST:event_fechaDeNacimientoPersonalPropertyChange

    /**
     * Según la provincia carga las localidades correspondientes.
     *
     * @param evt
     */
    private void provinciaDomicilioFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_provinciaDomicilioFocusLost
        localidadDomicilio.setModel(CapaPresentacion.getListaDeLocalidad(
                listaDeProvincias, provinciaDomicilio.getSelectedIndex() - 1));
    }//GEN-LAST:event_provinciaDomicilioFocusLost

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_botonCancelarActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        agregarOModificarPaciente();
    }//GEN-LAST:event_botonAceptarActionPerformed

    /**
     * Agrega/modifica un paciente a la base de datos.
     * 
     */
    private void agregarOModificarPaciente() {
        //Valida todos los datos ingresados
        if (validarCamposPaciente()) {
            //Si el documento no existe en la bd
            if (esPacienteUnico()) {
                if (esCorreoElectronicoUnico()) {
                    //Carga toda la información de la pantalla
                    recopilarInformacion();

                    boolean agregarOModificar = seDebeReasigar();
                    if (agregarOModificar) {
                        //Confirmar modificación
                        if (CapaPresentacion.confirmarModificacion("paciente", "el")) {
                            //Agrega/modifica el paciente
                            if (PacienteLogica.agregarOModificarPaciente(
                                    datosPaciente, paciente)) {
                                if (this.getTitle().equalsIgnoreCase("Agregar Paciente")) {
                                    imprimirCarnet(true);
                                    MensajePresentacion.confirmarAltaPaciente(paciente);
                                }
                                pacienteAgregadoOModificado = true;
                                this.dispose();
                            }
                        }
                    }
        //Errores
                } else {
                    MensajePresentacion.errorDuplicidadObjeto(
                                "El correo electrónico");
                }
            } else {
                MensajePresentacion.errorDuplicidadObjeto("El paciente");
            }
        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }

    /**
     * Si se está modificando la fecha de nacimieto de la persona, la cual es
     * contacto de paciente/s, debe reasignarse otra/s persona como contacto
     * de lo/s paciente/s en caso de que se convierta en menor de edad.
     *
     */
    private boolean seDebeReasigar() {
        Date fechaTemporal = new Date();
        boolean reasignacionExitosa = false;

        //Se debe reasignar siempre y cuando se trate de modificacion
        Persona personaAuxiliar = new Persona();
        if (paciente.getPersona() != null) {
            personaAuxiliar = paciente.getPersona();
            fechaTemporal = paciente.getPersona().
                    getFechaDeNacimientoPersona();
        }

        personaAuxiliar.setFechaDeNacimientoPersona(
                fechaDeNacimientoPersonal.getDate());

        int opcion = MensajePresentacion.confirmarMenorDeEdad(personaAuxiliar);
        
        if(paciente.getPersona() != null) {
            paciente.getPersona().setFechaDeNacimientoPersona(
                    fechaTemporal);
        }
        
        //Si se confirma la modificación debe reasignarse contacto
        if (opcion == 0) {
            reasignacionExitosa = reasignarContactoAPaciente();
        }
        
        //Esto es para decidir si se sigue adelante en el proceso de alta/modficación de persona
        if (opcion == -1 || (opcion == 0 && reasignacionExitosa)) {
            return true;
        } else {
            //Con 1 o 2 se cancela la modificación de la persona
            return false;
        }
    }

    /**
     * Reasigna las personas correspondientes al paciente, ya sea en calidad
     * de tutor o persona de contacto.
     *
     * que figura en pantalla
     *
     */
    private boolean reasignarContactoAPaciente() {
        RestriccionAcceso.ReasignarContactoAPacientePresentacion(
                null, true, paciente.getPersona());
        
        // Si las personas fueron reasignadas se podrá cambiar la edad.
        if (ReasignarContactoAPacientePresentacion.isReasignacionExitosa()) {
            return true;
        } else {
            return false;
        }
    }

    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaPersona.getModel());
        tablaPersona.setRowSorter(sorter);
        
        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarKeyReleased

    /**
     * Agrega la persona de contacto seleccionada al panel correspondiente.
     *
     * @param evt
     */
    private void botonSeleccionarPersonaDeContactoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSeleccionarPersonaDeContactoActionPerformed
        int seleccion[] = tablaPersona.getSelectedRows();

        if(botonSeleccionarPersonaDeContacto.getIcon().equals(Icono.ICONO_16_IZQUIERDA) &&
                seleccion.length != 0){
            if(!agregarPersonaDeContacto()){
                // Si no se linkeo correctamente se sale
                return;
            }
            invertirBoton(botonSeleccionarPersonaDeContacto);

        } else if (botonSeleccionarPersonaDeContacto.getIcon().equals(Icono.ICONO_16_DERECHA)) {
            quitarPersonaDeContacto();
            invertirBoton(botonSeleccionarPersonaDeContacto);
        }

    }//GEN-LAST:event_botonSeleccionarPersonaDeContactoActionPerformed

    /**
     * Agrega el tutor seleccionado al panel correspondiente.
     *
     * @param evt
     */
    private void botonSeleccionarTutorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSeleccionarTutorActionPerformed
        int seleccion[] = tablaPersona.getSelectedRows();

        if(botonSeleccionarTutor.getIcon().equals(Icono.ICONO_16_DERECHA) &&
                seleccion.length != 0){
            if(!agregarTutor()){
                // Si no se linkeo correctamente se sale
                return;
            }
            invertirBoton(botonSeleccionarTutor);
        } else if (botonSeleccionarTutor.getIcon().equals(Icono.ICONO_16_IZQUIERDA)) {
            quitarTutor();
            invertirBoton(botonSeleccionarTutor);
        }
    }//GEN-LAST:event_botonSeleccionarTutorActionPerformed

    /**
     * Invierte la leyenda del botón.
     *
     * @param boton El componente boton
     * @return El botón invertido
     */
    public static JButton invertirBoton(JButton boton) {
        if (boton.getIcon().equals(Icono.ICONO_16_IZQUIERDA)) {
            boton.setIcon(Icono.ICONO_16_DERECHA);
        } else {
            boton.setIcon(Icono.ICONO_16_IZQUIERDA);
        }
        return boton;
    }

    private void botonAgregarPersonaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarPersonaActionPerformed
//        Paginador.paginarElemento[0] = false;
        ComunPersonaPresentacion.agregarPersona(tablaPersona, tablaPersonaScrollPanel);
    }//GEN-LAST:event_botonAgregarPersonaActionPerformed

    private void numeroDeDocumentoPersonalFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_numeroDeDocumentoPersonalFocusLost
        traerPersonaExistenteDeBd();
    }//GEN-LAST:event_numeroDeDocumentoPersonalFocusLost

    private void tipoDeDocumentoPersonalFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tipoDeDocumentoPersonalFocusLost
        traerPersonaExistenteDeBd();
    }//GEN-LAST:event_tipoDeDocumentoPersonalFocusLost

    /**
     * En el caso de alta si el documento ingresado pertenece a alguna persona
     * ya registrada en la bd, completa la información pre existente.
     *
     */
    private void traerPersonaExistenteDeBd() {
        if (this.getTitle().equals("Agregar Paciente")) {
            String tipo = tipoDeDocumentoPersonal.getSelectedItem().toString();
            String numero = numeroDeDocumentoPersonal.getText();
            //Si es válido el documento ingresado
            if (PersonaValidacion.validarDocumento(tipo, numero, true)) {
                Persona persona = PersonaLogica.getPersonaPorDocumentoEnBd(
                        tipo + " " + numero);
                //Si existe se visualiza. Sino no pasa nada
                if (persona != null && !PacienteLogica.esPaciente(persona)) {
                    //Presenta el mensaje de informacion
                    if (MensajePresentacion.confirmarPersonaExistente(this)) {
                        //Seteo de nombre
                        nombrePersonal.setText(persona.getNombrePersona());

                        //Seteo de apellido
                        apellidoPersonal.setText(persona.getApellidoPersona());

                        //Seteo de fecha
                        fechaDeNacimientoPersonal.setDate(
                                persona.getFechaDeNacimientoPersona());

                        //Seteo de teléfonos
                        telefonoParticularDatosDeContacto.setText(
                                persona.getTelefonoParticularPersona());
                        telefonoMovilDatosDeContacto.setText(
                                persona.getTelefonoMovilPersona());
                    } else {
                        nombrePersonal.setText("");
                        apellidoPersonal.setText("");
                        fechaDeNacimientoPersonal.setDate(null);
                        telefonoParticularDatosDeContacto.setText("");
                        telefonoMovilDatosDeContacto.setText("");
                    }
                } else {
                    return;
                }
            }
        }
    }

    private void tablaPersonaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaPersonaMouseClicked
        if (evt.getButton() == 3) {
            PopUpMenu.createPopupMenuPersona(tablaPersona, tablaPersonaScrollPanel,
                    this);
        }
    }//GEN-LAST:event_tablaPersonaMouseClicked

    private void femeninoPersonalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_femeninoPersonalActionPerformed
        if (femeninoPersonal.isSelected()) {
            masculinoPersonal.setSelected(false);
        }
}//GEN-LAST:event_femeninoPersonalActionPerformed

    private void rutaFotoPersonalMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaFotoPersonalMouseClicked
        if(evt.getButton() == 1 && rutaFotoPersonal.getForeground().equals(
                Fuente.COLOR_HIPERVINCULO)) {
            CapaPresentacion.abrirArchivo(
                    paciente.getIdPaciente(),
                    paciente.getNombreArchivoFotografiaPaciente(),
                    paciente.getArchivoFotografiaPaciente(),
                    true);
        }
    }//GEN-LAST:event_rutaFotoPersonalMouseClicked

    private void rutaFotoPersonalMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaFotoPersonalMouseEntered
        if (rutaFotoPersonal.getForeground().equals(Fuente.COLOR_HIPERVINCULO)) {
            setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        }
    }//GEN-LAST:event_rutaFotoPersonalMouseEntered

    private void rutaFotoPersonalMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaFotoPersonalMouseExited
        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_rutaFotoPersonalMouseExited

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaPersona();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaPersona();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    /**
     * Completa el panel persona de contacto con la persona seleccionada.
     *
     * @return true si la agregó correctamente
     */
    private boolean agregarPersonaDeContacto(){
        //Recupero la info de la tabla
        Persona personaSeleccionada = (Persona)
                MiModeloTabla.recuperarObjetoDeTabla(
                Persona.class.getName(), tablaPersona);
        Paciente pacienteSeleccionado = PacienteLogica.getPacientePorDocumento(
                tipoDeDocumentoPersonal.getSelectedItem().toString(),
                numeroDeDocumentoPersonal.getText());

        String documentoPersonaSeleccionada =
                CapaPresentacion.imprimirDocumento(personaSeleccionada);

        String documentoPaciente = "";

        if (pacienteSeleccionado != null) {
        documentoPaciente =
                CapaPresentacion.imprimirDocumento(pacienteSeleccionado.getPersona());
        }

        boolean fallecioPaciente = false;
        Paciente pacienteDePersona = PacienteLogica.getPacientePorPersona(personaSeleccionada);
        if (pacienteDePersona != null) {
            fallecioPaciente = pacienteDePersona.getFichaMortalidad() != null;
        }

        if (!fallecioPaciente) {
            if (!CapaLogica.esMenor(personaSeleccionada.getFechaDeNacimientoPersona())) {
                if (!documentoPersonaSeleccionada.equalsIgnoreCase(documentoPaciente)) {
                    personaDeContacto = personaSeleccionada;

                    //Cargo el panel
                    documentoPersonaDeContacto.setText(
                            CapaPresentacion.imprimirDocumento(
                            personaSeleccionada));
                    apellidoYNombrePersonaDeContacto.setText(
                            CapaPresentacion.imprimirApellidoYNombrePersona(
                            personaSeleccionada));
                    return true;
                } else {
                    MensajePresentacion.informarContactoNoHabilitado();
                    return false;
                }
            } else {
                MensajePresentacion.informarContactoNoHabilitado();
                    return false;
            }
        } else {
            MensajePresentacion.informarContactoNoHabilitado();
                    return false;
        }
    }

    /**
     * Setea en blanco el panel persona de contacto.
     *
     */
    private void quitarPersonaDeContacto(){
        vinculoPersonaDeContacto.setSelectedIndex(0);
        documentoPersonaDeContacto.setText("");
        apellidoYNombrePersonaDeContacto.setText("");
        personaDeContacto = null;
    }

    /**
     * Completa el panel tutor con la persona seleccionada.
     *
     * @return true si la agregó correctamente, false en caso contrario
     */
    private boolean agregarTutor(){
        //Recupero la info de la tabla
        Persona personaSeleccionada = (Persona)
                MiModeloTabla.recuperarObjetoDeTabla(
                Persona.class.getName(), tablaPersona);

        Paciente pacienteSeleccionado = PacienteLogica.getPacientePorDocumento(
                tipoDeDocumentoPersonal.getSelectedItem().toString(),
                numeroDeDocumentoPersonal.getText());

        String documentoPersonaSeleccionada =
                CapaPresentacion.imprimirDocumento(personaSeleccionada);

        String documentoPaciente = "";

        if (pacienteSeleccionado != null) {
        documentoPaciente =
                CapaPresentacion.imprimirDocumento(pacienteSeleccionado.getPersona());
        }

        boolean fallecioPaciente = false;
        Paciente pacienteDePersona = PacienteLogica.getPacientePorPersona(personaSeleccionada);

        if (pacienteDePersona != null) {
            fallecioPaciente = pacienteDePersona.getFichaMortalidad() != null;
        }

        if (!fallecioPaciente) {
            if (!CapaLogica.esMenor(personaSeleccionada.getFechaDeNacimientoPersona())) {
                if (!documentoPersonaSeleccionada.equalsIgnoreCase(documentoPaciente)) {
                    tutor = personaSeleccionada;

                    //Cargo el panel
                    documentoTutor.setText(
                            CapaPresentacion.imprimirDocumento(
                            personaSeleccionada));
                    apellidoYNombreTutor.setText(
                            CapaPresentacion.imprimirApellidoYNombrePersona(
                            personaSeleccionada));
                    return true;
                } else {
                    MensajePresentacion.informarContactoNoHabilitado();
                    return false;
                }
            } else {
                MensajePresentacion.informarContactoNoHabilitado();
                    return false;
            }
        } else {
            MensajePresentacion.informarContactoNoHabilitado();
                    return false;
        }
    }

    /**
     * Setea en blanco el panel persona de contacto.
     */
    private void quitarTutor(){
        documentoTutor.setText("");
        apellidoYNombreTutor.setText("");
        tutor = null;
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     * 
     */
    private void recopilarInformacion() {
        datosPaciente = new Object[24];

        recopilarDatosPersonal();
        recopilarDatosDeContacto();
        recopilarDatosDomicilio();
        recopilarDatosPersonaDeContacto();
        recopilarDatosTutor();
    }

    /**
     * Carga los datos del panel personal.
     *
     */
    private void recopilarDatosPersonal() {
        datosPaciente[CapaLogica.PERSONA_TIPO_DE_DOCUMENTO] =
                tipoDeDocumentoPersonal.getSelectedItem().toString();
        
        datosPaciente[CapaLogica.PERSONA_NUMERO_DE_DOCUMENTO] =
                numeroDeDocumentoPersonal.getText();
        
        datosPaciente[CapaLogica.PERSONA_NOMBRE] =
                nombrePersonal.getText();
        
        datosPaciente[CapaLogica.PERSONA_APELLIDO] =
                apellidoPersonal.getText();
        
        datosPaciente[CapaLogica.PERSONA_FECHA_DE_NACIMIENTO] =
                fechaDeNacimientoPersonal.getDate();
        
        if (femeninoPersonal.isSelected()) {
            datosPaciente[CapaLogica.PACIENTE_SEXO] = "femenino";
        } else {
            datosPaciente[CapaLogica.PACIENTE_SEXO] = "masculino";
        }
        
        datosPaciente[CapaLogica.PACIENTE_ESTADO_CIVIL] =
                estadoCivilPersonal.getSelectedItem().toString();
        
        datosPaciente[CapaLogica.PACIENTE_OCUPACION] =
                ocupacionPersonal.getSelectedItem().toString();
        
        datosPaciente[CapaLogica.PACIENTE_GRUPO_SANGUINEO] =
                grupoSanguineoPersonal.getSelectedItem().toString();
        
        datosPaciente[CapaLogica.PACIENTE_FACTOR_SANGUINEO] =
                factorSanguineoPersonal.getSelectedItem().toString();
        
        datosPaciente[CapaLogica.PACIENTE_OBRA_SOCIAL] =
                obraSocial;
        
        datosPaciente[CapaLogica.PACIENTE_NUMERO_AFILIACION_OBRA_SOCIAL] =
                numeroAfiliacionObraSocialPersonal.getText();
        
        datosPaciente[CapaLogica.PACIENTE_FOTO] =
                rutaFotoPersonal.getText();
    }

    /**
     * Carga los datos del panel datos de contacto.
     *
     */
    private void recopilarDatosDeContacto() {
        datosPaciente[CapaLogica.PERSONA_TELEFONO_PARTICULAR] =
                telefonoParticularDatosDeContacto.getText();
         
        datosPaciente[CapaLogica.PERSONA_TELEFONO_MOVIL] =
                telefonoMovilDatosDeContacto.getText();

         datosPaciente[CapaLogica.PERSONA_CORREO_ELECTRONICO] =
                 correoElectronicoDatosDeContacto.getText();
    }

    /**
     * Carga los datos del panel domicilio.
     * 
     */
    private void recopilarDatosDomicilio() {
        
        if (extranjeroDomicilio.isSelected()) {
            datosPaciente[CapaLogica.PACIENTE_RESIDE_EN_EL_EXTRANJERO] = "si";
            datosPaciente[CapaLogica.PACIENTE_DOMICILIO] = "";
            datosPaciente[CapaLogica.PACIENTE_PROVINCIA] = "";
            datosPaciente[CapaLogica.PACIENTE_LOCALIDAD] = "";
            datosPaciente[CapaLogica.PACIENTE_CODIGO_POSTAL] = "";
            datosPaciente[CapaLogica.PERSONA_TELEFONO_PARTICULAR] = "-";
            datosPaciente[CapaLogica.PERSONA_TELEFONO_MOVIL] = "-";
        } else {
            datosPaciente[CapaLogica.PACIENTE_RESIDE_EN_EL_EXTRANJERO] = "no";
            
            datosPaciente[CapaLogica.PACIENTE_DOMICILIO] =
                    calleDomicilio.getText() + ";"
                    + pisoDomicilio.getText() + ";"
                    + departamentoDomicilio.getText();
            
            if (provinciaDomicilio.getSelectedIndex() < 1) {
                datosPaciente[CapaLogica.PACIENTE_PROVINCIA] = "";
            } else {
                datosPaciente[CapaLogica.PACIENTE_PROVINCIA] =
                        provinciaDomicilio.getSelectedItem().toString();
            }

            if (localidadDomicilio.getSelectedIndex() < 1) {
                datosPaciente[CapaLogica.PACIENTE_LOCALIDAD] = "";
            } else {
                datosPaciente[CapaLogica.PACIENTE_LOCALIDAD] =
                        localidadDomicilio.getSelectedItem().toString();
            }

            datosPaciente[CapaLogica.PACIENTE_CODIGO_POSTAL] =
                    codigoPostalDomicilio.getText();
        }
    }

    /**
     * Carga los datos del panel persona de contacto.
     *
     */
    private void recopilarDatosPersonaDeContacto() {
        datosPaciente[CapaLogica.PACIENTE_PERSONA_DE_CONTACTO] =
                personaDeContacto;

        datosPaciente[CapaLogica.PACIENTE_VINCULO_PERSONA_DE_CONTACTO] =
                vinculoPersonaDeContacto.getSelectedItem().toString();
    }

    /**
     * Carga los datos del panel tutor.
     *
     */
    private void recopilarDatosTutor() {
        datosPaciente[CapaLogica.PACIENTE_TUTOR] =
                tutor;
    }
    
    /**
     * Valida en conjunto todos los campos. Aquellos que son obligatorios y los
     * que no.
     * 
     * @return true si el objeto está listo para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposPaciente() {
        boolean esInfoPersonalValido = validarCamposPersonal();
        boolean esInfoFotografiaValido = validarCampoFotografia();
        boolean esInfoDatosDeContactoValido = validarDatosDeContacto();
        boolean esInfoDomicilioValido = validarCamposDeDomicilio();
        boolean esInfoPersonaDeContactoValido = validarCamposPersonaDeContacto();
        boolean esInfoTutorValido = validarCamposTutor();

        return (esInfoPersonalValido && esInfoFotografiaValido && esInfoDatosDeContactoValido &&
                esInfoDomicilioValido && esInfoPersonaDeContactoValido && esInfoTutorValido);
    }

    /**
     * Valida los campos correspondientes al apartado persona.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposPersonal() {
        boolean retorno = true;

        //Manejo de la validación del documento
        if (!PersonaValidacion.validarDocumento(
                tipoDeDocumentoPersonal.getSelectedItem().toString(),
                numeroDeDocumentoPersonal.getText(), true)) {
            retorno = false;
            textoTipoDeDocumentoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoTipoDeDocumentoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_TIPO_DOCUMENTO);
            textoNumeroDeDocumentoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoNumeroDeDocumentoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_NUMERO_DOCUMENTO);
        } else {
            textoTipoDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoTipoDeDocumentoPersonal.setToolTipText(null);
            textoNumeroDeDocumentoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoNumeroDeDocumentoPersonal.setToolTipText(null);
        }
        
        //Manejo de la validación de nombre
        if (!PersonaValidacion.validarNombre(
                nombrePersonal.getText(), true)) {
            textoNombrePersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoNombrePersonal.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_NOMBRE);
            retorno = false;
        } else {
            textoNombrePersonal.setForeground(Fuente.COLOR_NORMAL);
            textoNombrePersonal.setToolTipText(null);
        }

        //Manejo de la validación de apellido
        if (!PersonaValidacion.validarApellido(
                apellidoPersonal.getText(), true)) {
            textoApellidoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoApellidoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_APELLIDO);
            retorno = false;
        } else {
            textoApellidoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoApellidoPersonal.setToolTipText(null);
        }

        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(
                fechaDeNacimientoPersonal.getDate(), null, true)) {
            textoFechaNacimientoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoFechaNacimientoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_FECHA);
            retorno = false;
        } else {
            textoFechaNacimientoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoFechaNacimientoPersonal.setToolTipText(null);
        }

        //Manejo de la validación de sexo
        if (!PersonaValidacion.validarSexo(
                femeninoPersonal.isSelected(),
                masculinoPersonal.isSelected(), true)) {
            textoSexoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoSexoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_PACIENTE_SEXO);
            retorno = false;
        } else {
            textoSexoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoSexoPersonal.setToolTipText(null);
        }

        //Manejo de la validación de estado civil
        if (!CapaValidacion.validarCampoObligatorio(
                estadoCivilPersonal.getSelectedItem().toString())) {
            textoEstadoCivilPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoEstadoCivilPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_PACIENTE_ESTADO_CIVIL);
            retorno = false;
        } else {
            textoEstadoCivilPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoEstadoCivilPersonal.setToolTipText(null);
        }

        //Manejo de la validación de ocupación
        if (!CapaValidacion.validarCampoObligatorio(
                ocupacionPersonal.getSelectedItem().toString())) {
            textoOcupacionPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoOcupacionPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_PACIENTE_OCUPACION);
            retorno = false;
        } else {
            textoOcupacionPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoOcupacionPersonal.setToolTipText(null);
        }

        //Manejo de la validación del grupo sanguineo
        if (!CapaValidacion.validarCampoObligatorio(
                grupoSanguineoPersonal.getSelectedItem().toString())) {
            textoGrupoSanguineoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoGrupoSanguineoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_PACIENTE_GRUPO_SANGUINEO);
            retorno = false;
        } else {
            textoGrupoSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoGrupoSanguineoPersonal.setToolTipText(null);
        }

        //Manejo de la validación del factor sanguineo
        if (!CapaValidacion.validarCampoObligatorio(
                factorSanguineoPersonal.getSelectedItem().toString())) {
            textoFactorSanguineoPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoFactorSanguineoPersonal.setToolTipText(InformeError.
                    INFORME_ERROR_PACIENTE_FACTOR_SANGUINEO);
            retorno = false;
        } else {
            textoFactorSanguineoPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoFactorSanguineoPersonal.setToolTipText(null);
        }

        //Manejo de la validación de obra social
        if (!ObraSocialValidacion.validarNumeroAfiliacion(paciente,
                numeroAfiliacionObraSocialPersonal.getText(), obraSocial)) {
            textoNumeroAfiliacionObraSocialPersonal.setForeground(
                    Fuente.COLOR_ERROR);
            textoNumeroAfiliacionObraSocialPersonal.setToolTipText(
                    InformeError.INFORME_ERROR_PACIENTE_NUMERO_AFILIADO);
            retorno = false;
        } else {
            textoNumeroAfiliacionObraSocialPersonal.setForeground(Fuente.COLOR_NORMAL);
            textoNumeroAfiliacionObraSocialPersonal.setToolTipText(null);
        }


        return retorno;
    }

    /**
     * Valida el tamaño de la fotografía
     *
     * @return true si el campo está listo para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoFotografia() {
        if(!CapaValidacion.validarArchivo(
                rutaFotoPersonal.getText(), false)){
           botonFotoPersonal.setForeground(
                   Fuente.COLOR_ERROR);
           botonFotoPersonal.setToolTipText(InformeError.
                   INFORME_ERROR_USO_COMUN_ARCHIVO);
           return false;
        } else {
           botonFotoPersonal.setForeground(Fuente.COLOR_NORMAL);
           botonFotoPersonal.setToolTipText("Quita la fotografía");
           return true;
        }
    }

    /**
     * Valida los campos correspondientes al apartado domicilio.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposDeDomicilio() {
        boolean domicilioRetorno = true;
        boolean localidadRetorno = true;
        boolean codigoPostalRetorno = true;
        
        if (extranjeroDomicilio.isSelected()) {
            textoDomicilio.setForeground(Fuente.COLOR_NORMAL);
            textoProvinciaDomicilio.setForeground(Fuente.COLOR_NORMAL);
            textoLocalidadDomicilio.setForeground(Fuente.COLOR_NORMAL);
            textoCodigoPostalDomicilio.setForeground(Fuente.COLOR_NORMAL);
            return true;
        } else {
            //Manejo de la validación de domicilio: Calle, Piso, Departamento
            if (!PacienteValidacion.validarDomicilio(
                    calleDomicilio.getText(), pisoDomicilio.getText(),
                    departamentoDomicilio.getText(), false)) {
                textoDomicilio.setForeground(
                        Fuente.COLOR_ERROR);
                textoDomicilio.setToolTipText(InformeError.
                        INFORME_ERROR_PACIENTE_DOMICILIO);
                domicilioRetorno = false;
            } else {
                textoDomicilio.setForeground(Fuente.COLOR_NORMAL);
                textoDomicilio.setToolTipText(null);
            }
            //Manejo de la validación de localidad
            if (!PacienteValidacion.validarLocalidad(
                    provinciaDomicilio.getSelectedItem(),
                    localidadDomicilio.getSelectedItem(), false)) {
                textoLocalidadDomicilio.setForeground(
                        Fuente.COLOR_ERROR);
                textoLocalidadDomicilio.setToolTipText(InformeError.
                        INFORME_ERROR_PACIENTE_LOCALIDAD);
                localidadRetorno = false;
            } else {
                textoLocalidadDomicilio.setForeground(Fuente.COLOR_NORMAL);
                textoLocalidadDomicilio.setToolTipText(null);
            }
            //Manejo de la validación de código postal
            if (!PacienteValidacion.validarCodigoPostal(
                    codigoPostalDomicilio.getText(), false)) {
                textoCodigoPostalDomicilio.setForeground(
                        Fuente.COLOR_ERROR);
                textoCodigoPostalDomicilio.setToolTipText(InformeError.
                        INFORME_ERROR_PACIENTE_CODIGO_POSTAL);
                codigoPostalRetorno = false;
            } else {
                textoCodigoPostalDomicilio.setForeground(Fuente.COLOR_NORMAL);
                textoCodigoPostalDomicilio.setToolTipText(null);
            }

        }
        return domicilioRetorno && localidadRetorno && codigoPostalRetorno ;
    }

    /**
     * Valida los campos correspondientes al apartado datos de contacto.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarDatosDeContacto() {
        boolean telefonoParticularRetorno = true;
        boolean telefonoMovilRetorno = true;
        boolean telefonoExtranjeroRetorno = true;
        boolean correoElectronicoRetorno = true;

        //Manejo de la validación de teléfono particular
        if (!PersonaValidacion.validarTelefono(
                telefonoParticularDatosDeContacto.getText(), true)) {
            textoTelefonoParticularDatosDeContacto.setForeground(
                    Fuente.COLOR_ERROR);
            textoTelefonoParticularDatosDeContacto.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_NUMERO_TELEFONO);
            telefonoParticularRetorno = false;
        } else {
            textoTelefonoParticularDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
            textoTelefonoParticularDatosDeContacto.setToolTipText(null);
        }

        //Manejo de la validación de teléfono movil
        if (!PersonaValidacion.validarTelefono(
                telefonoMovilDatosDeContacto.getText(), false)) {
            textoTelefonoMovilDatosDeContacto.setForeground(
                    Fuente.COLOR_ERROR);
            textoTelefonoMovilDatosDeContacto.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_NUMERO_TELEFONO);
            telefonoMovilRetorno = false;
        } else {
            textoTelefonoMovilDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
            textoTelefonoMovilDatosDeContacto.setToolTipText(null);
        }
        
        //Manejo de la validación de correo electrónico
        if (!PacienteValidacion.validarCorreoElectronico(
                correoElectronicoDatosDeContacto.getText(), false)) {
            textoCorreoElectronicoDatosDeContacto.setForeground(
                    Fuente.COLOR_ERROR);
            textoCorreoElectronicoDatosDeContacto.setToolTipText(
                    InformeError.INFORME_ERROR_PACIENTE_CORREO_ELECTRONICO);
            correoElectronicoRetorno = false;
        } else {
            textoCorreoElectronicoDatosDeContacto.setForeground(Fuente.COLOR_NORMAL);
            textoCorreoElectronicoDatosDeContacto.setToolTipText(null);
        }
        

        return telefonoParticularRetorno && telefonoMovilRetorno &&
                correoElectronicoRetorno && telefonoExtranjeroRetorno;
    }

    /**
     * Valida los campos correspondientes al apartado datos de persona de
     * contacto.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposPersonaDeContacto() {
        if (!documentoPersonaDeContacto.getText().isEmpty()) {
            if ((vinculoPersonaDeContacto.getSelectedItem() != null &&
                    vinculoPersonaDeContacto.getSelectedItem().toString().isEmpty())
                    || vinculoPersonaDeContacto.getSelectedItem() == null) {
                textoVinculoPersonaDeContacto.setForeground(
                        Fuente.COLOR_ERROR);
                textoVinculoPersonaDeContacto.setToolTipText(
                        InformeError.INFORME_ERROR_USO_COMUN_PERSONA_DE_CONTACTO_VINCULO);
                return false;
            } else {
                textoVinculoPersonaDeContacto.setForeground(
                        Fuente.COLOR_NORMAL);
                textoVinculoPersonaDeContacto.setToolTipText(
                        null);
                textoDescriptivoPanelContacto.setForeground(
                        Fuente.COLOR_NORMAL);
                textoDescriptivoPanelContacto.setToolTipText(
                        null);
                return true;
            }
        } else if (!vinculoPersonaDeContacto.getSelectedItem().toString().isEmpty()) {
                textoDescriptivoPanelContacto.setForeground(
                        Fuente.COLOR_ERROR);
                textoDescriptivoPanelContacto.setToolTipText(
                        InformeError.INFORME_ERROR_USO_COMUN_PERSONA_DE_CONTACTO);
                return false;
        } else {
            textoDocumentoPersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
            textoDocumentoPersonaDeContacto.setToolTipText(null);
            textoApellidoYNombrePersonaDeContacto.setForeground(Fuente.COLOR_NORMAL);
            textoApellidoYNombrePersonaDeContacto.setToolTipText(null);
            return true;
        }
    }
    
    /**
     * Valida los campos correspondientes al apartado datos de tutor.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposTutor() {
        if (botonSeleccionarTutor.isEnabled() && documentoTutor.getText().isEmpty()) {
           textoDescriptivoPanelContacto.setForeground(
                   Fuente.COLOR_ERROR);
           textoDescriptivoPanelContacto.setToolTipText(InformeError.
                   INFORME_ERROR_USO_COMUN_TUTOR);
           return false;
        } else {
           textoDescriptivoPanelContacto.setForeground(Fuente.COLOR_NORMAL);
           textoDescriptivoPanelContacto.setToolTipText(null);
           return true;
        }
    }

    /**
     * Verifica que no exista otra paciente cargada con el mismo documento.
     * (tipo y número). No se verifica si se reingresa el mismo documento.
     *
     * @return true si es único, false en caso contrario
     */
    private boolean esPacienteUnico(){
         //En caso de modificación, se verifica si no se cambió el documento
         if (paciente.getPersona() != null &&
                paciente.getPersona().
                getTipoDeDocumentoPersona().equalsIgnoreCase(
                tipoDeDocumentoPersonal.getSelectedItem().toString()) &&
                paciente.getPersona().getNumeroDeDocumentoPersona().equals(
                numeroDeDocumentoPersonal.getText())) {
            return true;
        } else {
            return (!PacienteLogica.existePacientePorDocumento(
                    tipoDeDocumentoPersonal.getSelectedItem().toString(),
                    numeroDeDocumentoPersonal.getText()));
        }
    }

    /**
     * Verifica que no exista otro usuario cargado con el mismo correo
     * electrónico. No se verifica si se reingresa el mismo correo electrónico.
     *
     * @return true si es único, false en caso contrario
     */
    private boolean esCorreoElectronicoUnico() {
        //En caso de modificación, se verifica si no se cambió el nomre de usuario
        if (paciente.getPersona() != null &&
                paciente.getPersona().getCorreoElectronicoPersona().equalsIgnoreCase(
                correoElectronicoDatosDeContacto.getText())) {
            return true;
        } else {
            if (PacienteValidacion.validarCorreoElectronico(
                    correoElectronicoDatosDeContacto.getText(), true)) {
                return (!PersonaLogica.existePersonaPorCorreoElectronicoEnBd(
                        correoElectronicoDatosDeContacto.getText()));
            }
            return true;
        }
    }

    /**
     * Devuelve una variable booleana que indica si el objeto se agregó o
     * modificó.
     * 
     * @return True si se modificó, False en caso contrario
     */
    public static boolean isPacienteAgregadoOModificado() {
        return pacienteAgregadoOModificado;
    }

    /**
     * Imprime la información.
     */
    public void imprimir() {
        if (paciente != null) {
            JEditorPane impresion = new JEditorPane();
            impresion.setText(PacienteLogica.getPacienteHTML(paciente));

            RestriccionAcceso.Imprimir(null, true, impresion, null);
        }
    }

    /**
     * Imprime el carnet del paciente.
     */
    public void imprimirCarnet(boolean recuperarPaciente) {
        if (recuperarPaciente) {
            paciente = PacienteLogica.getPacientePorDocumento(
                    tipoDeDocumentoPersonal.getSelectedItem().toString(),
                    numeroDeDocumentoPersonal.getText());
        }

        if (paciente != null) {
            new PacienteCarnetPresentacion(null, true, paciente).setVisible(true);
        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     * 
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    agregarOModificarPaciente();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        tipoDeDocumentoPersonal.addKeyListener(keyListenerEscape);
        estadoCivilPersonal.addKeyListener(keyListenerEscape);
        ocupacionPersonal.addKeyListener(keyListenerEscape);
        grupoSanguineoPersonal.addKeyListener(keyListenerEscape);
        factorSanguineoPersonal.addKeyListener(keyListenerEscape);
        vinculoPersonaDeContacto.addKeyListener(keyListenerEscape);
        provinciaDomicilio.addKeyListener(keyListenerEscape);
        localidadDomicilio.addKeyListener(keyListenerEscape);

        numeroDeDocumentoPersonal.addKeyListener(keyListenerEnter);
        numeroDeDocumentoPersonal.addKeyListener(keyListenerEscape);
        nombrePersonal.addKeyListener(keyListenerEnter);
        nombrePersonal.addKeyListener(keyListenerEscape);
        apellidoPersonal.addKeyListener(keyListenerEnter);
        apellidoPersonal.addKeyListener(keyListenerEscape);
        numeroAfiliacionObraSocialPersonal.addKeyListener(keyListenerEnter);
        numeroAfiliacionObraSocialPersonal.addKeyListener(keyListenerEscape);
        telefonoMovilDatosDeContacto.addKeyListener(keyListenerEnter);
        telefonoMovilDatosDeContacto.addKeyListener(keyListenerEscape);
        telefonoParticularDatosDeContacto.addKeyListener(keyListenerEnter);
        telefonoParticularDatosDeContacto.addKeyListener(keyListenerEscape);
        correoElectronicoDatosDeContacto.addKeyListener(keyListenerEnter);
        correoElectronicoDatosDeContacto.addKeyListener(keyListenerEscape);
        calleDomicilio.addKeyListener(keyListenerEnter);
        calleDomicilio.addKeyListener(keyListenerEscape);
        pisoDomicilio.addKeyListener(keyListenerEnter);
        pisoDomicilio.addKeyListener(keyListenerEscape);
        departamentoDomicilio.addKeyListener(keyListenerEnter);
        departamentoDomicilio.addKeyListener(keyListenerEscape);
        codigoPostalDomicilio.addKeyListener(keyListenerEnter);
        codigoPostalDomicilio.addKeyListener(keyListenerEscape);

        tipoDeDocumentoPersonal.addKeyListener(keyListenerEnter);
        tipoDeDocumentoPersonal.addKeyListener(keyListenerEscape);
        estadoCivilPersonal.addKeyListener(keyListenerEnter);
        estadoCivilPersonal.addKeyListener(keyListenerEscape);
        ocupacionPersonal.addKeyListener(keyListenerEnter);
        ocupacionPersonal.addKeyListener(keyListenerEscape);
        grupoSanguineoPersonal.addKeyListener(keyListenerEnter);
        grupoSanguineoPersonal.addKeyListener(keyListenerEscape);
        factorSanguineoPersonal.addKeyListener(keyListenerEnter);
        factorSanguineoPersonal.addKeyListener(keyListenerEscape);
        provinciaDomicilio.addKeyListener(keyListenerEnter);
        provinciaDomicilio.addKeyListener(keyListenerEscape);
        localidadDomicilio.addKeyListener(keyListenerEnter);
        localidadDomicilio.addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaDeNacimientoPersonal.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaDeNacimientoPersonal.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);

        femeninoPersonal.addKeyListener(keyListenerEscape);
        masculinoPersonal.addKeyListener(keyListenerEscape);

        extranjeroDomicilio.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonAgregarPersona.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
        botonFotoPersonal.addKeyListener(keyListenerEscape);
        botonObraSocialPersonal.addKeyListener(keyListenerEscape);
        botonSeleccionarPersonaDeContacto.addKeyListener(keyListenerEscape);
        botonSeleccionarTutor.addKeyListener(keyListenerEscape);

        tablaPersona.addKeyListener(keyListenerEscape);
    }

    public static void cargarTablaPersona() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        //Carga todas las personas menos la que se esta cargando
        MiModeloTabla.cargarTablaPersona(
                PersonaLogica.getVectorPersonaYEnBd(), tablaPersona);
    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 10;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaPersona() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaPersona.getModel().getColumnCount() > 0) {
               cargarTablaPersona();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    public static void paginarAdelanteTablaPersona() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaPersona.getModel().getColumnCount() > 0) {
                cargarTablaPersona();
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (PersonaLogica.getVectorPersonaMayorDeEdadYEnBd() == null) {
                    Paginador.atrasPaginador(0);
                }
                cargarTablaPersona();
        }
    }

    public static Paciente getPaciente() {
        return paciente;
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField apellidoPersonal;
    private javax.swing.JLabel apellidoYNombrePersonaDeContacto;
    private javax.swing.JLabel apellidoYNombreTutor;
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonAgregarPersona;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonFotoPersonal;
    private javax.swing.JButton botonObraSocialPersonal;
    private javax.swing.JButton botonSeleccionarPersonaDeContacto;
    private javax.swing.JButton botonSeleccionarTutor;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JTextField calleDomicilio;
    private javax.swing.JTextField codigoPostalDomicilio;
    private javax.swing.JTextField correoElectronicoDatosDeContacto;
    private javax.swing.JTextField departamentoDomicilio;
    private javax.swing.JLabel documentoPersonaDeContacto;
    private javax.swing.JLabel documentoTutor;
    private javax.swing.JComboBox estadoCivilPersonal;
    private javax.swing.JCheckBox extranjeroDomicilio;
    private javax.swing.JComboBox factorSanguineoPersonal;
    private com.toedter.calendar.JDateChooser fechaDeNacimientoPersonal;
    private javax.swing.JRadioButton femeninoPersonal;
    private javax.swing.JTextField filtrar;
    private javax.swing.JComboBox grupoSanguineoPersonal;
    private javax.swing.JComboBox localidadDomicilio;
    private javax.swing.JRadioButton masculinoPersonal;
    private javax.swing.JTextField nombrePersonal;
    private javax.swing.JTextField numeroAfiliacionObraSocialPersonal;
    private javax.swing.JTextField numeroDeDocumentoPersonal;
    private javax.swing.JLabel obraSocialPersonal;
    private javax.swing.JComboBox ocupacionPersonal;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JPanel panelDatosDeContacto;
    private javax.swing.JPanel panelDomicilio;
    private javax.swing.JPanel panelPersonaDeContacto;
    private javax.swing.JPanel panelPersonaResponsable;
    private javax.swing.JPanel panelPersonal;
    private javax.swing.JPanel panelTutor;
    private javax.swing.JTextField pisoDomicilio;
    private javax.swing.JComboBox provinciaDomicilio;
    private javax.swing.JLabel rutaFotoPersonal;
    private static javax.swing.JTable tablaPersona;
    private javax.swing.JScrollPane tablaPersonaScrollPanel;
    private javax.swing.JTextField telefonoMovilDatosDeContacto;
    private javax.swing.JTextField telefonoParticularDatosDeContacto;
    private javax.swing.JLabel textoApellidoPersonal;
    private javax.swing.JLabel textoApellidoYNombrePersonaDeContacto;
    private javax.swing.JLabel textoApellidoYNombreTutor;
    private javax.swing.JLabel textoCodigoPostalDomicilio;
    private javax.swing.JLabel textoCorreoElectronicoDatosDeContacto;
    private javax.swing.JLabel textoDepartamentoDomicilio;
    private javax.swing.JLabel textoDescriptivoPanelContacto;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoDocumentoPersonaDeContacto;
    private javax.swing.JLabel textoDocumentoTutor;
    private javax.swing.JLabel textoDomicilio;
    private javax.swing.JLabel textoEstadoCivilPersonal;
    private javax.swing.JLabel textoFactorSanguineoPersonal;
    private javax.swing.JLabel textoFechaNacimientoPersonal;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoGrupoSanguineoPersonal;
    private javax.swing.JLabel textoLocalidadDomicilio;
    private javax.swing.JLabel textoNombrePersonal;
    private javax.swing.JLabel textoNumeroAfiliacionObraSocialPersonal;
    private javax.swing.JLabel textoNumeroDeDocumentoPersonal;
    private javax.swing.JLabel textoNumeroHcPersonal;
    private javax.swing.JLabel textoOcupacionPersonal;
    private javax.swing.JLabel textoPisoDomicilio;
    private javax.swing.JLabel textoProvinciaDomicilio;
    private javax.swing.JLabel textoSexoPersonal;
    private javax.swing.JLabel textoTelefonoMovilDatosDeContacto;
    private javax.swing.JLabel textoTelefonoParticularDatosDeContacto;
    private javax.swing.JLabel textoTipoDeDocumentoPersonal;
    private javax.swing.JLabel textoVinculoPersonaDeContacto;
    private javax.swing.JComboBox tipoDeDocumentoPersonal;
    private javax.swing.JComboBox vinculoPersonaDeContacto;
    // End of variables declaration//GEN-END:variables
    private static Paciente paciente;
    private Object[] datosPaciente;
    private ObraSocial obraSocial;
    private Persona personaDeContacto;
    private Persona tutor;
    private Vector<Provincia> listaDeProvincias;
    static public boolean pacienteAgregadoOModificado;
}
